74. Search a 2D Matrix
题目 74. Search a 2D Matrix
思路分析
首先想法是
- 对第一列进行二分:找到最后一个满足
matrix[i][0] <= target的行索引row。 - 对该行进行二分:在
matrix[row]这个数组里查找target。
其实观察可以发现 其实按照先行再列的顺序走下去 他也是递增的 可以2维转1维 只做一次二分
代码实现
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
int n = matrix[0].length;
int top=0,bottom=m-1;
int row = -1;
while(top<=bottom){
int mid = top+bottom>>1;
if(matrix[mid][0]<=target){
row=mid;
top=mid+1;
}else{
bottom=mid-1;
}
}
if(row == -1) return false;
int l=0,r=n-1;
while(l<=r){
int mid=l+r>>1;
if(matrix[row][mid]==target){
return true;
}else if(matrix[row][mid]<target){
l=mid+1;
}else{
r=mid-1;
}
}
return false;
}
}
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m=matrix.length;
int n=matrix[0].length;
int l=0,r=m*n-1;
while(l<=r){
int mid=l+r>>1;
int val=matrix[mid/n][mid%n];
if(val==target){
return true;
}else if(val<target){
l=mid+1;
}else{
r=mid-1;
}
}
return false;
}
}
💬 评论